package com.yeyks.service;

import com.yeyks.dal.domain.UserInfo;
import com.yeyks.dto.BankBindDTO;

/**
 * @Author fuchangshuai
 * @date 2019/2/25 7:51 PM
 */
public interface UserInfoService {

    /**
     * 用户充值10元成普通vip会员，得两张50元券
     *
     * @param id
     * @param payAmount
     * @return
     */
    Boolean createVIP(Integer id, Integer payAmount);

    /**
     * 通过手机号查询用户信息
     *
     * @param phone
     * @return
     */
    UserInfo selectUseInfoPhone(String phone);

    /**
     * 用户设置头像
     *
     * @param id
     * @param avatar
     * @return
     */
    Integer updateAvatar(Integer id, String avatar);

    /**
     * 增加用户，并返回用户id
     *
     * @param userInfo
     */
    void insertReturnId(UserInfo userInfo);

    /**
     * 通过用户id，修改用户密码
     *
     * @param id
     * @param password
     * @return
     */
    Integer modifyPasswordById(Integer id, String password);

    /**
     * 通过用户id查询用户
     *
     * @param id
     * @return
     */
    UserInfo selectByPrimaryKey(Integer id);

    /**
     * 分享后用户通过手机号注册
     *
     * @param userInfo
     */
    Boolean phoneLogin(UserInfo userInfo);

    /**
     * 通过用户的id更新扩展字段
     *
     * @param id
     * @param extraInfo
     * @return
     */
    Integer updateExtraInfoById(Integer id, String extraInfo);

    /**
     * 通过用户id获取token
     *
     * @param userId
     * @return
     */
    String getTokenByUseId(Integer userId);

    /**
     * 通过token获取用户信息
     *
     * @param token
     * @return
     */
    UserInfo tokenUserInfo(String token);

    /**
     * 通过邀请码获取该用户
     *
     * @param code
     * @return
     */
    UserInfo selectUserByCode(String code);

    /**
     * 更新
     *
     * @param userInfo
     */
    int updateUserInfo(UserInfo userInfo);

    /**
     * test给用户生成邀请码
     */
    void createCode();

    /**
     * 获取用户openid
     *
     * @param userInfo
     * @param code 微信code
     * @param type 类型gzh(公众号),xcx(小程序)
     * @return
     */
    String getOpenId(UserInfo userInfo, String code, String type);

    /**
     * 判断用户是否需要绑卡
     *
     * @param userInfo
     * @return
     */
    Boolean isBind(UserInfo userInfo);

    /**
     * 用户绑定银行卡
     *
     * @param userInfo
     * @param bankCard
     * @param bankName
     * @param userName
     * @return
     */
    Boolean bankCard(UserInfo userInfo, String bankCard, String bankName, String userName);

    /**
     * 获取用户绑卡信息
     *
     * @param userInfo
     * @return
     */
    BankBindDTO bankCardInfo(UserInfo userInfo);
}
